package com.example.hrsystem.data.source;

import androidx.lifecycle.LiveData;
import androidx.room.Dao;
import androidx.room.Insert;
import androidx.room.Query;
import androidx.room.Update;

import com.example.hrsystem.data.model.User;

import java.util.List;

/**
 * 用户数据访问对象
 * 提供对User表的操作方法
 */
@Dao
public interface UserDao {

    /**
     * 插入一条用户记录
     */
    @Insert
    void insert(User user);

    /**
     * 更新用户记录
     */
    @Update
    void update(User user);

    /**
     * 查询所有用户记录（异步版本，返回LiveData）
     */
    @Query("SELECT * FROM users")
    LiveData<List<User>> getAllUsers();
    
    /**
     * 查询所有用户记录（同步版本，直接返回List<User>）
     */
    @Query("SELECT * FROM users")
    List<User> getAllUsersDirect();

    /**
     * 根据用户ID查询用户记录（异步版本，返回LiveData）
     */
    @Query("SELECT * FROM users WHERE userId = :userId")
    LiveData<User> getUserById(int userId);

    /**
     * 根据用户ID查询用户记录（同步版本，直接返回User对象）
     */
    @Query("SELECT * FROM users WHERE userId = :userId")
    User getUserByIdSync(int userId);

    /**
     * 根据员工工号查询用户记录
     */
    @Query("SELECT * FROM users WHERE employeeId = :employeeId")
    LiveData<User> getUserByEmployeeId(String employeeId);

    /**
     * 根据部门查询用户记录
     */
    @Query("SELECT * FROM users WHERE department = :department")
    LiveData<List<User>> getUsersByDepartment(String department);

    /**
     * 查询在职员工
     */
    @Query("SELECT * FROM users WHERE isActive = 1")
    LiveData<List<User>> getActiveUsers();

    /**
     * 根据用户类型查询用户记录
     */
    @Query("SELECT * FROM users WHERE userType = :userType")
    LiveData<List<User>> getUsersByUserType(String userType);

    /**
     * 检查用户是否存在
     */
    @Query("SELECT COUNT(*) FROM users WHERE userId = :userId")
    int isUserExists(int userId);

    /**
     * 根据手机号和密码查询用户
     * 用于登录验证
     */
    @Query("SELECT * FROM users WHERE phoneNumber = :phoneNumber AND password = :password")
    User getUserByPhoneAndPassword(String phoneNumber, String password);

    /**
     * 检查手机号是否已存在
     * 用于注册时验证
     */
    @Query("SELECT COUNT(*) FROM users WHERE phoneNumber = :phoneNumber")
    int isPhoneNumberExists(String phoneNumber);

    /**
     * 根据用户ID删除用户
     */
    @Query("DELETE FROM users WHERE userId = :userId")
    void deleteUserById(int userId);

    /**
     * 删除所有用户
     */
    @Query("DELETE FROM users")
    void deleteAll();
    
    /**
     * 根据手机号查询用户
     */
    @Query("SELECT * FROM users WHERE phoneNumber = :phoneNumber")
    List<User> getUsersByPhoneNumber(String phoneNumber);
}